package com.lhx.product.service;

import com.lhx.common.core.domain.R;
import com.lhx.product.domain.ProductResult;
import com.lhx.product.domain.dto.ProductDTO;
import com.lhx.product.domain.dto.ProductParam;
import com.lhx.product.domain.dto.ProductQueryParam;
import com.lhx.product.domain.po.ParentPO;
import com.lhx.product.domain.po.ProductPO;
import com.lhx.product.domain.vo.ProductVO;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

public interface ProductService {
    /**
     * 商品列表
     * @param productVO
     * @return
     */
    List<ProductPO> findProductAll(ProductVO productVO);

    /**
     * 商品删除
     * @param id
     * @return
     */
    R productDele(String id);

    /**
     * 商品修改
     * @param ProductPO
     * @return
     */
    R productUpdate(ProductPO ProductPO);

    /**
     * 商品添加
     * @param ProductPO
     * @return
     */
    R productAdd(ProductPO ProductPO);

    List<ParentPO> parentAll(ParentPO parentPo);

    R parentDele(String id);

    R parentUpdate(ParentPO parentPo);

    R parentAdd(ParentPO parentPo);

    void productAdds(ProductDTO dto);

    /**
     * 查询商品
     * @param productQueryParam
     * @return
     */
    List<ProductVO> list(ProductQueryParam productQueryParam);

    /**
     * 商品添加
     * @param productParam
     * @return
     */
    R productAddParam(ProductParam productParam);

    /**
     * 商品添加
     * @param productParam
     * @return
     */
    @Transactional(isolation = Isolation.DEFAULT,propagation = Propagation.REQUIRED)
    int create(ProductParam productParam);


    /**
     * 获取商品修改信息
     * @param id
     * @return
     */
    ProductResult getUpdateInfo(Long id);

    /**
     * 更新商品信息
     * @param id
     * @param productParam
     * @return
     */
    @Transactional
    int update(Long id, ProductParam productParam);

}
